package br.ucb.ucblive.validator;

import java.io.InputStream;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;

import org.primefaces.model.UploadedFile;

import br.ucb.ucblive.HIB.UsuarioHIB;

@SessionScoped
@ManagedBean(name="formValidator")
public class FormValidator{

	private Date dataInicio;
	private Date dataFim;
	private UploadedFile arquivo; 
	private String login;
	private String matricula;
	private boolean atualizaUsuario;
	
	public void validateDataInicio(FacesContext context, UIComponent component, Object object)
			throws ValidatorException {
		setDataInicio((Date) object);
	}
	
	public void validateDataFim(FacesContext context, UIComponent component, Object object)
			throws ValidatorException {
		setDataFim((Date) object);
		if(dataFim.before(dataInicio)){
			FacesMessage mensagem = new FacesMessage();
			mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
			mensagem.setDetail("Data Final tem que ser igual ou superior a Data Inicial");
			mensagem.setSummary("Data Final tem que ser igual ou superior a Data Inicial");
			throw new ValidatorException(mensagem);
		}
	}
	
	public void validateArquivo(FacesContext context, UIComponent component, Object object)
			throws ValidatorException {
		setArquivo((UploadedFile) object);
		if(arquivo.getContents().length>100000){
			FacesMessage mensagem = new FacesMessage();
			mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
			mensagem.setDetail("Arquivo deve ter at� 100kb");
			mensagem.setSummary("Arquivo deve ter at� 100kb");
			throw new ValidatorException(mensagem);
		}
	}
	
	public void validateLogin(FacesContext context, UIComponent component, Object object)
			throws ValidatorException {
		setLogin((String) object);
		
		UsuarioHIB usuarioHIB = new UsuarioHIB();
		if(usuarioHIB.consultar(login)!=null){
			FacesMessage mensagem = new FacesMessage();
			mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
			mensagem.setDetail("Login já cadastrado! Informe outro!");
			mensagem.setSummary("Login já cadastrado! Informe outro!");
			throw new ValidatorException(mensagem);
		}
	}
	
	public void validateMatricula(FacesContext context, UIComponent component, Object object)
			throws ValidatorException {
		setMatricula((String) object);
		if(!atualizaUsuario){
			UsuarioHIB usuarioHIB = new UsuarioHIB();
			if(usuarioHIB.consultarUsuarioByMatricula(matricula)!=null){
				FacesMessage mensagem = new FacesMessage();
				mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
				mensagem.setDetail("Matrícula já cadastrada! Informe outra!");
				mensagem.setSummary("Matrícula já cadastrada! Informe outra!");
				throw new ValidatorException(mensagem);
			}
		}
		setAtualizaUsuario(false);
	}

	public Date getDataInicio() {
		return dataInicio;
	}

	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}

	public Date getDataFim() {
		return dataFim;
	}

	public void setDataFim(Date dataFim) {
		this.dataFim = dataFim;
	}

	public UploadedFile getArquivo() {
		return arquivo;
	}

	public void setArquivo(UploadedFile arquivo) {
		this.arquivo = arquivo;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public boolean isAtualizaUsuario() {
		return atualizaUsuario;
	}

	public void setAtualizaUsuario(boolean atualizaUsuario) {
		this.atualizaUsuario = atualizaUsuario;
	}
}
